iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0

Django Hello World

昨天已經快速生成 Django 基本架構,和啟動 server 後,今天我們要來在畫面上印出 Hello World

1. 產生子類應用程式

Django 有一個很厲害的地方,就是 Django 的 應用程式 是可拆卸式,如果今天你的專案是 線上商城,這個線上商城裡面有數個 子類應用程式,像是 商店功能聊天功能 之類的,這些 子類應用程式 是可以分享給其他 Django 的使用者下載使用的。

如果不懂上面的意思話,直接看以下操作:

$ python3 manage.py startapp online

上面的指令,會在 store 資料夾中,生成一個 online 的資料夾,這個 online 就是 子類應用程式

2. 資料夾架構

store/    
    online/
        migrations/       -> 放資料庫的變動過程,跟 rails 的 migration 差不多
        __init__.py       
        admin.py          -> 可以進入 admin 模式編輯 online 的資料
        apps.py           -> 註冊功能的地方
        models.py         -> MVT 中的 M,放 online 中的 model 資料,跟 rails 的 model 差不多,不過最大的不同是,這邊的 model 會描寫欄位的屬性,像是結合的 rails 的 schema
        tests.py          -> 這個資料夾是測試資料夾,測試在這邊寫
        views.py          -> MVT 中的 V,放 online 中收發 request 和 response 的地方,跟 rails 的 controller 差不多
    manage.py
    store/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

這樣應該就可以了解剛剛前面說的那一句是什麼意思,也就是如果你今天想要讓你的 online 應用程式讓別人使用,你可以只打包這一個 online 資料夾讓別人匯到自己的專案上,別人就可以使用你已經寫好的 online 功能

3. 註冊 online 應用

新增好 online 應用程式,我們要到 store/settings 的地方,把剛剛新創的 子類應用程式,加進整個應用程式內,才能以順利啟用。


這個 setting 的資料夾,就跟 ROR 的 config 檔案 有點類似,都是在調整整個專案基礎設定的地方
ex. 時區、語言、資料庫


# store/settings

INSTALLED_APPS = [
     
    'online.apps.OnlineConfig',       # 新增這一行
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

'online.apps.OnlineConfig' 這一段的意思也很清楚,你可以跟著 code 去找原點,首先是 online 就是剛剛新創的資料夾,裡面有一個 apps.py 的檔案,並且檔案中有一個 class 叫做 OnlineConfig

5. 設定起始資料庫

我們一開始先用 sqlite3 就好,如果之後是要上線的應用程式,在換成別的資料庫

# store/settings

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

6. 時區設定

來把時區改成台北時間

# settings

TIME_ZONE = 'Asia/Taipei'

7. 設定路徑

開始準備路徑設定,路徑總是最重要的,我們先來找到這個檔案 store/urls.py,這個檔案就是我們設定路徑的地方,並加上下面那一段:

# store/urls.py

# ...上方省略

from django.conf.urls import include

urlpatterns += [
    path('online/', include('online.urls'))
]

設定好之後,來解釋一下這一段的意思, path('online/'主要就是生出一個這個路徑 http://127.0.0.1:8000/online/

include('online.urls') 這一段很重要,就是要讓整個專案引入 online 這個資料夾中的 urls.py 檔案,也就是說我們還要在 online 資料夾裡面新增一個 urls.py 檔案

如剛剛所說,我們現在來新增一個這個檔案 store/online/urls.py,並在該檔案裡面新增幾段程式。
Ps. 此檔案跟前面的 urls.py 不一樣的路徑喔,要看清楚!而且這個檔案是不會預設生成的,要自己手動新增

# store/online/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path("", views.index, name="index")
]

詳細解釋一下檔案做了什麼:
(1) 首先引入要用到的變數
(2) 新增一個路徑,並且該路徑等等要去找 views.py 裡面的 index 方法,他對應的連結會像這樣 http://127.0.0.1:8000/online/
(3) name="index" 這個 name 設定的用意,是為了之後我們在設定 template 中的連結時,可以方面我們快速設定好指定路徑,不清楚的話後面實作 template 得時候會比較好懂

介紹 path() 函式

  • 以下是 path 函式的基本架構
path(route, view, kwargs=None, name=None)
  • route: 這是 URL 的一部分,它用來匹配請求的 URL。例如,"about/" 可以匹配 https://example.com/about/
  • view: 這是與 URL 關聯的 view 函式。當路徑匹配時,Django 將調用這個 view 函式來處理請求。
  • kwargs(可選):一個字典,包含視圖函式的參數。
  • name(可選):這是 URL 的名稱,可以在你的程式碼中用來反向查找 URL。這對於在模板中生成 URL 連結非常有用。

簡而言之,path() 函式幫助你將一個 URL 路徑(route)與一個視圖函式(view)相關聯,使得當用戶訪問該 URL 時,Django 可以將請求交給正確的 view 來處理。


path 就是像 ROR 的 member、collection 那樣,決定連結應該要長什麼樣子,並且會對應到哪一個 Controller


8. 設定 view.py

如剛剛提到的,我們在設定路徑時,有一段是 views.index,他的意思就是要去找到 views.py 這個資料夾,並且裡面的 index 方法:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.

def index(request):
    return HttpResponse("hello world")

介紹一下這個檔案在幹嘛:
(1) 首先匯入要用的函式
(2) 設定剛剛在 urls.py 指定的 index 方法
(3) 在頁面上渲染想要渲染的字樣

9. 瀏覽器打開指定連結

最後最後,我們只要在瀏覽器輸入這個連結 http://127.0.0.1:8000/online/ ,就可以成功印出 hello world 了!

https://ithelp.ithome.com.tw/upload/images/20230916/20162365bx9mevmoCp.png

總結

今天學到哪些東西呢?

  1. 如何創建子類應用程式
  2. 如何設定路徑
  3. 介紹 path 函式
  4. 如何印出 hello world

最後附上 Github: https://github.com/eagle0526/Django-store


上一篇
DAY4 - 快速生成 Django 基礎應用程式架構
下一篇
DAY3 - Django templates 和 側邊欄
系列文
Django 初學入門 - 從 ROR 的角度來學習 Django30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言